perm filename PUPSTA.MID[PUP,MRC] blob
sn#544805 filedate 1980-10-21 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00008 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 PDLLEN IIILIN DMLIN DDDLIN ILM EXCT FNCN ALPHBG CHNL COLM HILIN LOLIN PUP RFCS RFCR CLSS CLSR DEVCHR DEVIOS INPW LNK0W BLOKW ALLW BAL MAL NHBA NHMA HBA HMA BIIL MIIL
C00006 00003 DELAYP PDL HSTADR LINCNT HDABLK HSIZE SCREEN COLPOS TXTOUT DPHEAD FRSPTY PRJPRG JOBNAM PTYJOB TTYTAB
C00009 00004 PUPSTA
C00011 00005 DPYLUP HDNODM
C00021 00006 PTYLUP PTYFND GETLOC NTELSR NXTPTY MSGEND CLREOF
C00028 00007 NODDDM DOIII DODM DELAY NODLAY DELAY1
C00030 00008 TERPRI DECOUT OCTOUT NUMOUT NUMOU1 NUMOU2 NUMOU3 JOBOUT SIXOUT SIXOU1 TXTSTR ...LIT
C00032 ENDMK
C⊗;
;PDLLEN IIILIN DMLIN DDDLIN ILM EXCT FNCN ALPHBG CHNL COLM HILIN LOLIN PUP RFCS RFCR CLSS CLSR DEVCHR DEVIOS INPW LNK0W BLOKW ALLW BAL MAL NHBA NHMA HBA HMA BIIL MIIL
TITLE PUPSTAT
SUBTTL Definitions
; Mark Crispin, SU-AI, October 1980
X=1 ? Y=2 ? Z=3 ? L=4 ? I=5 ? N=6 ? DDB=7 ? J=10 ? T=11 ? A=12 ? B=13 ? C=14 ? P=17
PDLLEN==50. ; stack size
; GETLIN bits
IIILIN==400000,, ; terminal is a III
DMLIN== 040000,, ; terminal is a DM
DDDLIN==020000,, ; terminal is a DD
; APRENB bits
ILM== 020000 ; MPV occured
; Data Risc command word
DEFINE CW ?C1,B1,C2,B2,C3,B3
<<B1←28.>\<B2←20.>\<B3←12.>\<C1←9.>\<C2←6.>\<C3←3>\4>
TERMIN
; Data Risc command names
EXCT== 0 ; execute
FNCN== 1 ; function, usual value bytes
ALPHBG==6 ? ALPHA==46
CHNL== 2 ; channel select
COLM== 3 ; column select
HILIN== 4 ; set high 5 bits of line address
LOLIN== 5 ; set low 4 bits of line address
;DELAYP PDL HSTADR LINCNT HDABLK HSIZE SCREEN COLPOS TXTOUT DPHEAD FRSPTY PRJPRG JOBNAM PTYJOB TTYTAB
SUBTTL Data area
DELAYP: BLOCK 1 ; -1 → don't delay
PDL: BLOCK PDLLEN ; stack
HSTADR: BLOCK 1 ; where host table begins
LINCNT: BLOCK 1 ; line count
HDABLK: BLOCK 13 ; terminal location block
HSIZE: BLOCK 1 ; horizontal size
SCREEN: BLOCK 1 ; display screen image pointer
; Display program stuff
COLPOS: CW COLM,2,HILIN,1,LOLIN,10 ; second column, second line
TXTOUT: CW FNCN,ALPHA,CHNL,0,FNCN,ALPHA ; text output
DPHEAD: 200000,, ; double field mode
0 ; size
0
0 ; address of low order line select for DD
; Monitor pointers
FRSPTY: 0 ; TTY # of first PTY
; Pointers indexed by job number
PRJPRG: (J) ; PPN
JOBNAM: (J) ; program name
; Pointers indexed by PTY number
PTYJOB: (T) ; PTY mother
; Pointers indexed by TTY number
TTYTAB: (T) ; TTY DDB pointer
;PUPSTA
SUBTTL Start of program
PUPSTA: JFCL
RESET
MOVE P,[PDL(-PDLLEN)]
MOVE JOBFF
HRRM DPHEAD
MOVEM DPHEAD+3
AOS DPHEAD+3
ADDI 2
MOVEM SCREEN
MOVEI [ MOVE JOBREL
ADDI 2000 ; another K of core, please
CORE
JRST 4,PUPSTA
LOCK
JRST DPYLUP] ; restart status
MOVEM JOBAPR
MOVEI ILM
APRENB
LOCK ; ensure fast response
MOVE [100,,300←5+10] ; map the monitor in
GETHI
JRST 4,.-1
MOVEI [.RSQZ 0,TCONLN ? 0]
.SYML
JRST 4,.-1
ADDI 1
MOVEM FRSPTY
MOVE 400211 ; PRJPRG
ADDI 400000
HRRM PRJPRG
MOVE 400225 ; JOBNAM
ADDI 400000
HRRM JOBNAM
MOVE 400270 ; PTYJOB
SUB FRSPTY
ADDI 400000 ; indexed by PTY number
HRRM PTYJOB
MOVE 400220 ; TTYTAB
ADDI 400000
HRRM TTYTAB
MOVE J,400226 ; JOB
MOVE J,400000(J)
MOVE L,400236 ; JBTLIN
ADDI L,400000(J)
MOVE L,(L)
CAMN L,[-1]
EXIT ; punt if detached
MOVEI L,400000(L)
ADD L,400302 ; LINTAB
MOVE L,(L)
HRROI [015000,,HSIZE]
TTYSET
PPSEL 1
DPYPOS -452 ; near botton of screen
DPYSIZ 3002 ; 3 glitches, 2 lines/glitch
; JRST DPYLUP
;DPYLUP HDNODM
DPYLUP: SETZB @SCREEN
ADJSP @SCREEN
AOS
BLT @JOBREL
MOVSI X,440700
HRR X,SCREEN
SETZM LINCNT
TLNN (DMLIN)
JRST HDNODM
MOVEI 177
IDPB X
MOVEI ↑W
IDPB X
HDNODM:
;PTYLUP PTYFND GETLOC NTELSR NXTPTY MSGEND CLREOF
SUBTTL PTY map
LDB T,[001100,,400221] ; number of PTY's
HRLOI T,-1(T)
EQV T,FRSPTY ; first PTY
SKIPN J,@PTYJOB
AOBJN T,.-1
JUMPE J,MSGEND
MOVEI <" >
IDPB X
PUSHJ P,TERPRI
JSP Y,TXTSTR
ASCIZ/PTY CJ Usr Subsys SJ Usr Subsys Location/
PUSHJ P,TERPRI
JRST PTYFND
PTYLUP: SKIPN J,@PTYJOB
JRST NXTPTY
PTYFND: MOVEI N,3
PUSH P,J
MOVEI Y,(T)
PUSHJ P,OCTOUT
MOVEI <" >
IDPB X
PUSHJ P,JOBOUT
HRRZ J,@TTYTAB
ADD J,400347 ; PJOBN
HRRZS J ; physical address
PEEK J, ; TTY DDB's may be in upper 128K
MOVE 400347 ; PJOBN
HRRI J
LDB J,
JUMPE J,[ JSP Y,TXTSTR
ASCIZ/ /
JRST GETLOC]
MOVEI <" >
IDPB X
PUSHJ P,JOBOUT
MOVEI <" >
IDPB X
GETLOC: POP P,A ; try for TELSER's 137 convention
HRROI B,137
MOVEI C,B
MOVEI A
JOBRD
JRST NTELSR
JUMPE B,NTELSR
TLNE B,-1
JRST NTELSR
HRLI B,-13
MOVEI C,HDABLK
JOBRD
JRST NTELSR
MOVE HDABLK
CAME ['TERMID]
JRST NTELSR
SKIPA Y,[440700,,HDABLK+1]
IDPB X
ILDB Y
JUMPN .-2
NTELSR: PUSHJ P,TERPRI
NXTPTY: AOBJN T,PTYLUP
MSGEND: MOVEI <" >
IDPB X
PUSHJ P,TERPRI
MOVE Z,HSIZE
TLNE L,(DDDLIN\DMLIN)
CLREOF: CAMG Z,LINCNT
JRST NODDDM ; III or printing
MOVEI <" >
IDPB X
PUSHJ P,TERPRI
SOJA Z,CLREOF
; (continued on next page)
;NODDDM DOIII DODM DELAY NODLAY DELAY1
SUBTTL Display it!
NODDDM: TLNN X,700000 ; if at word boundry
ADDI X,1
SETZM 1(X) ; HALT to stop program
MOVEI X,(X)
MOVEI 2(X)
SUBI @DPHEAD
MOVEM DPHEAD+1 ; save display program length
AOS (X)
CAME X,SCREEN
SOJA X,.-2
; Now output the accumulated text
TLNN L,(DDDLIN\IIILIN\DMLIN)
JRST [ OUTSTR @SCREEN
OUTSTR [ASCIZ/
/]
JRST DELAY]
JUMPL L,DOIII
TLNE L,(DMLIN)
JRST [ SETZM @DPHEAD
MOVE X,[.BYTE 7 ? 177 ? ↑L ? 140 ? 142]; cursor at third line
JRST DODM]
MOVE TXTOUT
MOVEM @DPHEAD
SKIPA X,COLPOS
DOIII: MOVE X,[.BYTE 11.,11.,3,3,2,2,4 ? -777 ? 640 ? 2 ? 2 ? 1 ? 2 ? 6]
DODM: MOVEM X,@DPHEAD+3
UPGIOT 1,DPHEAD ; display the text
; Done, wait a while and go again
DELAY: SKIPE DELAYP
JRST NODLAY
MOVEI 20.
TLNE L,(DDDLIN\IIILIN)
MOVEI 1
TLNE L,(DMLIN)
MOVEI 5.
SLEEP
NODLAY: SNEAKS
JRST DPYLUP
ANDI 177
CAIN 175
JRST [INCHRW ? SETCMM DELAYP ? JRST DPYLUP] ; ALT toggles the delay flag
CAIN <" >
JRST [INCHRW ? INCHRW ? JRST DPYLUP] ; space holds us
CAIE ↑M
JRST DELAY1
INCHRW ; only eat CRLF's
INCHRW
DELAY1: HRROI [004000,,400\"N]
TTYSET
EXIT
;TERPRI DECOUT OCTOUT NUMOUT NUMOU1 NUMOU2 NUMOU3 JOBOUT SIXOUT SIXOU1 TXTSTR ...LIT
SUBTTL Random stuff
TERPRI: JSP Y,TXTSTR
ASCIZ/
/
AOS LINCNT
TLNN (DMLIN)
POPJ P,
MOVEI 177
IDPB X
MOVEI ↑W
IDPB X
POPJ P,
; Octal/decimal output of Y. If N > 0, pad with spaces so it fits in N digits
DECOUT: SKIPA Z,[10.]
OCTOUT: MOVEI Z,8.
HRRM Z,NUMOUT ; I don't want to fry another AC
NUMOUT: IDIVI Y,
ADDI Z,"0
PUSH P,Z
SOJLE N,NUMOU1
JUMPN Y,NUMOU2
MOVEI Z,<" >
IDPB Z,X
SOJG N,.-1
JRST NUMOU3
NUMOU1: SKIPE Y
NUMOU2: PUSHJ P,NUMOUT
NUMOU3: POP P,Y
IDPB Y,X
POPJ P,
; Job number/PPN/name output
JOBOUT: MOVEI N,2
MOVEI Y,(J)
PUSHJ P,DECOUT
MOVEI <" >
IDPB X
HRLZ Y,@PRJPRG
MOVEI N,3
PUSHJ P,SIXOU1
MOVEI <" >
IDPB X
MOVE Y,@JOBNAM
; JRST SIXOUT
; Sixbit output routine
SIXOUT: MOVEI N,6
SIXOU1: SETZ Z,
ROTC Y,6
ADDI Z,"A-'A
IDPB Z,X
SOJG N,SIXOUT+1
POPJ P,
; Output text string, called with JSP
TXTSTR: HRLI Y,440700
ILDB Y
JUMPE 1(Y)
IDPB X
JRST TXTSTR+1
...LIT: CONSTA
END PUPSTAT